/**
 *
 */
package fr.thelem.gestiondemandesthelem.web.adminactions;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import fr.thelem.gestiondemandesthelem.dao.model.CPDemandeEntity;
import fr.thelem.gestiondemandesthelem.service.IAppliService;
import fr.thelem.gestiondemandesthelem.web.actions.BaseAction;

/**
 *
 */
public class GestionDemandesAction extends BaseAction {

    /** Attribut serialVersionUID */
    private static final long serialVersionUID = 1L;

    private IAppliService appliService;

    private Map valider = new HashMap();
    private Map invalider = new HashMap();
    private List<CPDemandeEntity> listeDemandes;
    private List<String> listType = new ArrayList<String>();
    private List<String> listEtat = new ArrayList<String>();
    private String type;
    private String etat;

    private Map annuler = new HashMap();
    private Map supprimer = new HashMap();
    private String nomcp;
    private List<String> allCPDemande = new ArrayList<String>();

    /**
     * Accesseur de appliService
     * 
     * @return le appliService
     */
    public IAppliService getAppliService() {
        return appliService;
    }

    /**
     * Affectation de appliService
     * 
     * @param appliService appliService à affecter
     */
    public void setAppliService(IAppliService appliService) {
        this.appliService = appliService;
    }

    /**
     * Accesseur de valider
     * 
     * @return le valider
     */
    public Map getValider() {
        return valider;
    }

    /**
     * Affectation de valider
     * 
     * @param valider valider à affecter
     */
    public void setValider(Map valider) {
        this.valider = valider;
    }

    /**
     * Accesseur de invalider
     * 
     * @return le invalider
     */
    public Map getInvalider() {
        return invalider;
    }

    /**
     * Affectation de invalider
     * 
     * @param invalider invalider à affecter
     */
    public void setInvalider(Map invalider) {
        this.invalider = invalider;
    }

    /**
     * Accesseur de listeDemandes
     * 
     * @return le listeDemandes
     */
    public List<CPDemandeEntity> getListeDemandes() {
        return listeDemandes;
    }

    /**
     * Affectation de listeDemandes
     * 
     * @param listeDemandes listeDemandes à affecter
     */
    public void setListeDemandes(List<CPDemandeEntity> listeDemandes) {
        this.listeDemandes = listeDemandes;
    }

    /**
     * Accesseur de listType
     * 
     * @return le listType
     */
    public List<String> getListType() {
        return listType;
    }

    /**
     * Affectation de listType
     * 
     * @param listType listType à affecter
     */
    public void setListType(List<String> listType) {
        this.listType = listType;
    }

    /**
     * Accesseur de listEtat
     * 
     * @return le listEtat
     */
    public List<String> getListEtat() {
        return listEtat;
    }

    /**
     * Affectation de listEtat
     * 
     * @param listEtat listEtat à affecter
     */
    public void setListEtat(List<String> listEtat) {
        this.listEtat = listEtat;
    }

    /**
     * Accesseur de type
     * 
     * @return le type
     */
    public String getType() {
        return type;
    }

    /**
     * Affectation de type
     * 
     * @param type type à affecter
     */
    public void setType(String type) {
        this.type = type;
    }

    /**
     * Accesseur de etat
     * 
     * @return le etat
     */
    public String getEtat() {
        return etat;
    }

    /**
     * Affectation de etat
     * 
     * @param etat etat à affecter
     */
    public void setEtat(String etat) {
        this.etat = etat;
    }

    public Map getAnnuler() {
        return annuler;
    }

    public void setAnnuler(Map annuler) {
        this.annuler = annuler;
    }

    public Map getSupprimer() {
        return supprimer;
    }

    public void setSupprimer(Map supprimer) {
        this.supprimer = supprimer;
    }

    /**
     * {@inheritDoc}
     */
    public String execute() throws Exception {
        this.ajouterRoleSession();
        initialiser();
        this.etat = "Ouverte";
        // listeDemandes = (List<CPDemandeEntity>) appliService.recupererDemandesEnCoursEnAttente();
        return SUCCESS;

    }

    /**
     * Rechercher les demandes en fonction du type et de l'etat choisi
     * 
     * @return
     * @throws Exception
     */

    public String rechercheForm() throws Exception {
        initialiser();
        if (type != null | etat != null) {
            listeDemandes = (List<CPDemandeEntity>) appliService.rechercherDemandesParTypeParEtat(etat, type);
        } else {
            listeDemandes = (List<CPDemandeEntity>) appliService.recupererDemandesEnCoursEnAttente();
        }
        return SUCCESS;
    }

    /**
     * Récupération de la liste des types et la liste des etats
     * 
     */
    private void initialiser() {
        listType.add("Tous");
        listType.addAll(appliService.recupererType());

        listEtat.add("Tous");
        listEtat.addAll(appliService.recupererEtat());

        listeDemandes = (List<CPDemandeEntity>) appliService.recupererDemandeOuvert();
        List<CPDemandeEntity> listReOuvert = (List<CPDemandeEntity>) appliService.recupererDemandeReOuvert();
        List<CPDemandeEntity> listEnCours = (List<CPDemandeEntity>) appliService.recupererDemandeEnCours();
        List<CPDemandeEntity> listEnAttente = (List<CPDemandeEntity>) appliService.recupererDemandeEnAttente();
        
        
        listeDemandes.addAll(listReOuvert);
        listeDemandes.addAll(listEnCours);
        listeDemandes.addAll(listEnAttente);
        
        /*listeDemandes = (List<CPDemandeEntity>) appliService.rechercherDemandesParTypeParEtat("Ouverte", "Tous");*/
    }
    
    
    public String recupererDemandesAutoComplete() throws Exception {
        for (String d : appliService.recupererAllCPDemande()) {
            allCPDemande.add(d);
        }
        return SUCCESS;
    }
    
    public String recherchedemandesForm() throws Exception {
        initialiser();
        listeDemandes = (List<CPDemandeEntity>) appliService.rechercherDemandeParNom(nomcp);
        return SUCCESS;
    }
    
    
    

    public String traitementDemandeAdmin() throws Exception {
        for (Iterator i = annuler.keySet().iterator(); i.hasNext();) {
            int idDemande = Integer.valueOf((String) i.next());
            appliService.modifierEtatDemande(idDemande, "Annulée");
            appliService.modifierDateDernierEtatDemande(idDemande);
        }

        for (Iterator i = supprimer.keySet().iterator(); i.hasNext();) {

            int idDemande = Integer.valueOf((String) i.next());
            appliService.supprimerDemande(idDemande);
        }

        initialiser();
        return SUCCESS;
    }

	public String getNomcp() {
		return nomcp;
	}

	public void setNomcp(String nomcp) {
		this.nomcp = nomcp;
	}

	public List<String> getAllCPDemande() {
		return allCPDemande;
	}

	public void setAllCPDemande(List<String> allCPDemande) {
		this.allCPDemande = allCPDemande;
	}
}
